home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / var / lib / python-support / python2.6 / gnome_sudoku / sudoku_thumber.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-04-20  |  4.2 KB  |  147 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import cairo
  5. import pango
  6. import gtk
  7. SUDOKU_SIZE = 9
  8. N_BOXES = 3
  9. PENCIL_GREY = (0.3, 0.3, 0.3)
  10. BACKGROUND_COLOR = (1, 1, 1)
  11.  
  12. def draw_sudoku(cr, sudoku, played, size, offset_x = 0, offset_y = 0, border_color = (1, 1, 1), line_color = (0, 0, 0)):
  13.     THIN = size / 100
  14.     THICK = THIN * 2
  15.     BORDER = THICK
  16.     WHITE_SPACE = size - 2 * BORDER - 2 * THICK - (N_BOXES - 1) * THICK - N_BOXES * 2 * THIN
  17.     SQUARE_SIZE = WHITE_SPACE / SUDOKU_SIZE
  18.     FONT_SIZE = SQUARE_SIZE
  19.     outer = { }
  20.     outer['left'] = offset_x
  21.     outer['right'] = offset_x + size
  22.     outer['top'] = offset_y
  23.     outer['bottom'] = offset_y + size
  24.     cr.set_source_rgb(1, 1, 1)
  25.     cr.rectangle(outer['left'], outer['top'], size, size)
  26.     cr.fill()
  27.     cr.set_line_join(cairo.LINE_JOIN_ROUND)
  28.     cr.set_line_width(BORDER)
  29.     cr.rectangle(outer['left'] + BORDER / 2, outer['top'] + BORDER / 2, size - BORDER, size - BORDER)
  30.     cr.set_source_rgb(*BACKGROUND_COLOR)
  31.     cr.fill_preserve()
  32.     cr.set_source_rgb(*border_color)
  33.     cr.stroke()
  34.     cr.set_line_join(cairo.LINE_JOIN_MITER)
  35.     cr.set_line_width(THICK)
  36.     cr.rectangle(outer['left'] + BORDER + THICK / 2, outer['top'] + BORDER + THICK / 2, size - BORDER * 2 - THICK, size - BORDER * 2 - THICK)
  37.     cr.set_source_rgb(*line_color)
  38.     cr.stroke()
  39.     inner = { }
  40.     inner['left'] = outer['left'] + BORDER + THICK
  41.     inner['right'] = outer['right'] - BORDER - THICK
  42.     inner['top'] = outer['top'] + BORDER + THICK
  43.     inner['bottom'] = outer['bottom'] - BORDER - THICK
  44.     pos = { }
  45.     position = BORDER + THICK
  46.     pos[0] = position + SQUARE_SIZE / 2
  47.     last_line = 0
  48.     for n in range(1, SUDOKU_SIZE):
  49.         if n % N_BOXES == 0:
  50.             cr.set_line_width(THICK)
  51.             position += SQUARE_SIZE + last_line / 2 + THICK / 2
  52.             last_line = THICK
  53.         else:
  54.             cr.set_line_width(THIN)
  55.             position += SQUARE_SIZE + last_line / 2 + THIN / 2
  56.             last_line = THIN
  57.         pos[n] = position + last_line / 2 + SQUARE_SIZE / 2
  58.         cr.move_to(BORDER + THICK / 2 + offset_x, position + offset_y)
  59.         cr.line_to((size - BORDER - THICK / 2) + offset_x, position + offset_y)
  60.         cr.move_to(position + offset_x, BORDER + THICK / 2 + offset_y)
  61.         cr.line_to(position + offset_x, (size - BORDER - THICK / 2) + offset_y)
  62.         cr.stroke()
  63.     
  64.     cr.set_font_size(FONT_SIZE)
  65.     for x in range(SUDOKU_SIZE):
  66.         for y in range(SUDOKU_SIZE):
  67.             cr.move_to(pos[x], pos[y])
  68.             letter = None
  69.             if sudoku[y][x]:
  70.                 letter = str(sudoku[y][x])
  71.                 cr.select_font_face('', cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD)
  72.                 cr.set_source_rgb(0, 0, 0)
  73.                 (xbearing, ybearing, width, height, xadvance, yadvance) = cr.text_extents(letter)
  74.             elif played and played[y][x]:
  75.                 cr.select_font_face('Times', cairo.FONT_SLANT_ITALIC, cairo.FONT_WEIGHT_NORMAL)
  76.                 cr.set_source_rgb(*PENCIL_GREY)
  77.                 letter = str(played[y][x])
  78.                 (xbearing, ybearing, width, height, xadvance, yadvance) = cr.text_extents(letter)
  79.             
  80.             if letter:
  81.                 cr.move_to(pos[x] + offset_x - xadvance / 2, pos[y] + offset_y + height / 2)
  82.                 cr.show_text(letter)
  83.                 continue
  84.         
  85.     
  86.  
  87.  
  88. def make_pixbuf(sudoku, played, border_color, line_color = (0.4, 0.4, 0.4)):
  89.     size = 120
  90.     surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, size, size)
  91.     cr = cairo.Context(surface)
  92.     draw_sudoku(cr, sudoku, played, size, 0, 0, border_color, line_color)
  93.     pixbuf = gtk.gdk.pixbuf_new_from_data(surface.get_data(), gtk.gdk.COLORSPACE_RGB, True, 8, surface.get_width(), surface.get_height(), surface.get_stride())
  94.     del surface
  95.     return pixbuf
  96.  
  97. if __name__ == '__main__':
  98.     sudoku = [
  99.         [
  100.             0,
  101.             0,
  102.             2,
  103.             3,
  104.             4,
  105.             5,
  106.             6,
  107.             0,
  108.             0]] * SUDOKU_SIZE
  109.     played = [
  110.         [
  111.             1,
  112.             2,
  113.             0,
  114.             0,
  115.             0,
  116.             0,
  117.             0,
  118.             0,
  119.             0,
  120.             0]] + [
  121.         [
  122.             0,
  123.             0,
  124.             0,
  125.             0,
  126.             0,
  127.             0,
  128.             0,
  129.             0,
  130.             0,
  131.             0]] * 8
  132.     size = 250
  133.     line_color = (0, 0, 0)
  134.     border_color = (1, 0, 0)
  135.     surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 750, 750)
  136.     cr = cairo.Context(surface)
  137.     draw_sudoku(cr, sudoku, played, size, 100, 250, border_color, line_color)
  138.     pb = gtk.gdk.pixbuf_new_from_data(surface.get_data(), gtk.gdk.COLORSPACE_RGB, True, 8, surface.get_width(), surface.get_height(), surface.get_stride())
  139.     del surface
  140.     w = gtk.Window()
  141.     img = gtk.Image()
  142.     img.set_from_pixbuf(pb)
  143.     w.add(img)
  144.     w.show_all()
  145.     gtk.main()
  146.  
  147.